<?php
/*
 * @description: Расширяет стандартный Zend_Controller_Action
 * полезным функционалом и контролем доступа через Zend_Acl
 * @copyright Copyright (c) 2012-2017 Marin V. , Tykva A. , Kozel R. , Sokolov D.
 * @version 1.0
 * @link http://lecturebox.ru
*/
abstract class Model_Controller extends Zend_Controller_Action
{
    protected $auth;
    protected $user_id = 0;    

    public function init()
    {
        parent::init();
        // Извлекаем id пользователя и объект Zend_Auth
        $this->auth = Zend_Auth::getInstance();
        if($this->auth->hasIdentity()){
            $this->user_id = $this->auth->getIdentity()->id;
            $this->view->username = $this->auth->getIdentity()->username;
            $this->view->email = $this->auth->getIdentity()->email;
            
            $user = new Model_User($this->user_id);            
            if ($user->blocking){
                $this->auth->clearIdentity();
                $this->_redirect('/');
            }
        }
        else $this->view->username = "гость";
        //категории
        $this->view->cats = Zend_Db_Table_Abstract::getDefaultAdapter()
                ->fetchAll('SELECT * FROM ' . TABLE_PREF . 'subjects');

        $this->view->messages = $this->getHelper('FlashMessenger')
                ->getMessages();
        
        
        
    }

    /**
     * Контроль доступа к странице
     */
    public function preDispatch()
    {
        // Получаем объявленный ранее объект Zend_Acl
        $acl = Zend_Registry::get('acl');
        // Получаем роль текущего пользователя
        $role = Bootstrap::getRole();
        // Проверяем имеет ли он права на доступ к текущему ресурсу
        if(!$acl->isAllowed(
                $role,
                'mvc:' . $this->getRequest()->getControllerName(),
                $this->getRequest()->getActionName())
        )// Если прав не имеет - перенаправляем на страницу ошибки
            $this->_redirect ('/error/access');
    }

    /**
     * Отправка JSON ответа от сервера
     * @param mixed $data
     */
    public function sendAjax($data='')
    {
        header('Cache-Control: no-cache, must-revalidate');
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        header('Content-Type: application/json');
        echo json_encode($data);
        exit;
    }
}
